home *** CD-ROM | disk | FTP | other *** search
- # Module 'gwin'
- # Generic stdwin windows
-
- # This is used as a base class from which to derive other window types.
- # XXX DON'T USE THIS CODE ANY MORE! It is ages old!
-
- import stdwin, stdwinq
- from stdwinevents import *
- from mainloop import mainloop, register, unregister, windows
-
- # Open a window
-
- def open(title): # Open a generic window
- w = stdwin.open(title)
- stdwin.setdefwinsize(0, 0)
- # Set default event handlers
- w.draw = nop
- w.char = nop
- w.mdown = nop
- w.mmove = nop
- w.mup = nop
- w.m2down = m2down
- w.m2up = m2up
- w.size = nop
- w.move = nop
- w.activate = w.deactivate = nop
- w.timer = nop
- # default command handlers
- w.close = close
- w.tab = tab
- w.enter = enter
- w.backspace = backspace
- w.arrow = arrow
- w.kleft = w.kup = w.kright = w.kdown = nop
- w.dispatch = treatevent
- register(w)
- return w
-
-
- def treatevent(e): # Handle a stdwin event
- type, w, detail = e
- if type == WE_DRAW:
- w.draw(w, detail)
- elif type == WE_MENU:
- m, item = detail
- m.action[item](w, m, item)
- elif type == WE_COMMAND:
- treatcommand(w, detail)
- elif type == WE_CHAR:
- w.char(w, detail)
- elif type == WE_MOUSE_DOWN:
- if detail[1] > 1: w.m2down(w, detail)
- else: w.mdown(w, detail)
- elif type == WE_MOUSE_MOVE:
- w.mmove(w, detail)
- elif type == WE_MOUSE_UP:
- if detail[1] > 1: w.m2up(w, detail)
- else: w.mup(w, detail)
- elif type == WE_SIZE:
- w.size(w, w.getwinsize())
- elif type == WE_ACTIVATE:
- w.activate(w)
- elif type == WE_DEACTIVATE:
- w.deactivate(w)
- elif type == WE_MOVE:
- w.move(w)
- elif type == WE_TIMER:
- w.timer(w)
- elif type == WE_CLOSE:
- w.close(w)
-
- def treatcommand(w, type): # Handle a we_command event
- if type == WC_CLOSE:
- w.close(w)
- elif type == WC_RETURN:
- w.enter(w)
- elif type == WC_TAB:
- w.tab(w)
- elif type == WC_BACKSPACE:
- w.backspace(w)
- elif type in (WC_LEFT, WC_UP, WC_RIGHT, WC_DOWN):
- w.arrow(w, type)
-
-
- # Methods
-
- def close(w): # Close method
- unregister(w)
- del w.close # Delete our close function
- w.close() # Call the close method
-
- def arrow(w, detail): # Arrow key method
- if detail == WC_LEFT:
- w.kleft(w)
- elif detail == WC_UP:
- w.kup(w)
- elif detail == WC_RIGHT:
- w.kright(w)
- elif detail == WC_DOWN:
- w.kdown(w)
-
-
- # Trivial methods
-
- def tab(w): w.char(w, '\t')
- def enter(w): w.char(w, '\n') # 'return' is a Python reserved word
- def backspace(w): w.char(w, '\b')
- def m2down(w, detail): w.mdown(w, detail)
- def m2up(w, detail): w.mup(w, detail)
- def nop(*args): pass
-